package controlador;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JToggleButton;

import vista.AcercaDe;
import vista.Ayuda;
import vista.HistorialJugadores;
import vista.JuegoNoIniciado;
import vista.NavalgoPrincipal;
import vista.NuevoJugador;

import modelo.JuegoNoIniciadoException;
import modelo.ModeloJuego;

public class ControladorJuego {
	
	private ModeloJuego modelo;
	private String disparoActual;
	private String nombreJugador;
    
	public ControladorJuego (ModeloJuego unModelo) {
		this.modelo = unModelo;		
	}	
	
	public MouseListener getListenerBotonPasarTurno () {
		return new EscucharMousePasarTurno();
	}
	
	public class EscucharMousePasarTurno implements MouseListener {		

		public void mouseClicked(MouseEvent arg0) {
			try {
				modelo.pasarTurno();
			} catch (JuegoNoIniciadoException e) { 
				JDialog mensaje = new JuegoNoIniciado();
				mensaje.setVisible(true);
			}			
		}

		public void mouseEntered(MouseEvent e) { }
		
		public void mouseExited(MouseEvent e) { }
		
		public void mousePressed(MouseEvent e) { }
		
		public void mouseReleased(MouseEvent e) { }
	}
	
	public MouseListener getListenerMenuNuevo (NavalgoPrincipal principal, ControladorJuego control) {
		return new EscucharMouseMenuNuevo(principal, control);
	}
	
	public class EscucharMouseMenuNuevo implements MouseListener {		
		private ControladorJuego control;
		private NavalgoPrincipal principal;

		public EscucharMouseMenuNuevo(NavalgoPrincipal principal, ControladorJuego control) {
			this.control = control;
			this.principal = principal;
		}
		
		public void mouseClicked(MouseEvent arg0) { }
		
		public void mouseEntered(MouseEvent e) { }
		
		public void mouseExited(MouseEvent e) { }
		
			
		public void mousePressed(MouseEvent e) { 
			NuevoJugador pideNombre = new NuevoJugador(control, principal, true);
			pideNombre.setVisible(true);					
			
			if (pideNombre.estaAceptado()) {
				modelo.nuevoJuego(nombreJugador);
				principal.habilitarTablero(true);
			}
		}
		
	
		public void mouseReleased(MouseEvent e) { }
	}

	public MouseListener getListenerBotonTablero() {
		return new EscucharMouseBotonTablero();
	}
	
	public class EscucharMouseBotonTablero implements MouseListener {		

		
		public void mouseClicked(MouseEvent arg0) { 
			JButton boton = (JButton) arg0.getSource();
			if (boton.isEnabled()) 				
				try {
					modelo.ponerDisparo(disparoActual, boton.getActionCommand());
					modelo.pasarTurno();
				} catch (JuegoNoIniciadoException e) { }		
		}
		
		
		public void mouseEntered(MouseEvent e) { }
		
		public void mouseExited(MouseEvent e) { }
				
		public void mousePressed(MouseEvent e) { }		
		
		public void mouseReleased(MouseEvent e) { }
	}

	public MouseListener getListenerBotonDisparoDirecto () {
		return new EscucharMouseBotonDisparo();
	}
	
	
	public MouseListener getListenerBotonMinaContacto () {
		return new EscucharMouseBotonDisparo();
	}
	
	public MouseListener getListenerBotonMinaPuntual () {
		return new EscucharMouseBotonDisparo();
	}
	
	public MouseListener getListenerBotonMinaDoble () {
		return new EscucharMouseBotonDisparo();
	}
	
	public MouseListener getListenerBotonMinaTriple () {
		return new EscucharMouseBotonDisparo();
	}
	
	public class EscucharMouseBotonDisparo implements MouseListener {		

		public void mouseClicked(MouseEvent arg0) {
			JToggleButton evento = (JToggleButton) arg0.getSource();
			disparoActual = evento.getActionCommand();					
		}

		public void mouseEntered(MouseEvent e) { }
		
		public void mouseExited(MouseEvent e) { }
		
		public void mousePressed(MouseEvent e) { }
		
		public void mouseReleased(MouseEvent e) { }
	}
	
	public void setDisparoActual(String tipoDisparo){
		this.disparoActual = tipoDisparo;
	}	

	public MouseListener getListenerMenuAyuda () {
		return new EscucharMouseMenuAyuda();
	}
	
	public class EscucharMouseMenuAyuda implements MouseListener {		
		public void mouseClicked(MouseEvent arg0) { }		
		public void mouseEntered(MouseEvent e) { }		
		public void mouseExited(MouseEvent e) { }		
			
		public void mousePressed(MouseEvent e) { 
			Ayuda ayuda = new Ayuda();
			ayuda.setVisible(true);
		}
		
		public void mouseReleased(MouseEvent arg0) { }
	}
	
	public MouseListener getListenerMenuAcercaDe () {
		return new EscucharMouseMenuAcercaDe();
	}
	
	public class EscucharMouseMenuAcercaDe implements MouseListener {		
		public void mouseClicked(MouseEvent arg0) { }		
		public void mouseEntered(MouseEvent e) { }		
		public void mouseExited(MouseEvent e) { }		
			
		public void mousePressed(MouseEvent e) { 
			AcercaDe acercaDe = new AcercaDe();
			acercaDe.setVisible(true);
		}
		
		public void mouseReleased(MouseEvent arg0) { }
	}
	
	public MouseListener getListenerMenuSalir (JFrame frame) {
		return new EscucharMouseMenuSalir(frame);
	}
	
	public class EscucharMouseMenuSalir implements MouseListener {		
		private JFrame frame;
		public EscucharMouseMenuSalir(JFrame frame) { 
			this.frame = frame;
		} 		
		
		public void mouseClicked(MouseEvent arg0) { }		
		public void mouseEntered(MouseEvent e) { }		
		public void mouseExited(MouseEvent e) { }		
			
		public void mousePressed(MouseEvent e) { 
			int confirmar = JOptionPane.showOptionDialog(frame,
                    "Desea salir de Batalla Navalgo?",
                    "Confirmar Salida", JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE, 
                    new ImageIcon("iconos/navalgo.png"), 
                    null, null);			
            if (confirmar == JOptionPane.YES_OPTION) {
                System.exit(0);
            }
		}
		
		public void mouseReleased(MouseEvent arg0) { }
	}
	
	
	public MouseListener getListenerMenuHistorial () {
		return new EscucharMouseMenuHistorial();
	}
	
	public class EscucharMouseMenuHistorial implements MouseListener {		
		
		public void mouseClicked(MouseEvent arg0) { }		
		public void mouseEntered(MouseEvent e) { }		
		public void mouseExited(MouseEvent e) { }		
			
		public void mousePressed(MouseEvent e) { 		
         HistorialJugadores historial = new HistorialJugadores();
         historial.setVisible(true);
		}
		
		public void mouseReleased(MouseEvent arg0) { }
	}
	

	public void setNombreJugador(String nombre) {
		this.nombreJugador = nombre;		
	}
	
	public String getNombreJugador() {
		return this.nombreJugador;		
	}
	
}
